Skip to content

Repository files navigation

SeeVE - 脆弱性統合分析・類似度検索プラットフォーム

SeeVEは、NVD (National Vulnerability Database) の CVE 情報と ExploitDB の実証コード (PoC) を統合・分析し、LLM による自動脆弱性悪用可能性評価と 2 段階ハイブリッド検索アルゴリズムに基づく類似脆弱性推測を提供するセキュリティ解析プラットフォームです。


🌟 主な機能 (Key Features)

  • 🔍 2 段階ハイブリッド検索 & カスタムリランキング (2-Stage Hybrid Search)

    • Stage 1 (Vector Search): OpenAI text-embedding-3-small (1536 次元) ベクトル埋め込みデータと Annoy (Approximate Nearest Neighbors Oh Yeah) インデックスを活用し、膨大な CVE データベースからミリ秒単位で上位候補を高速抽出します。
    • Stage 2 (Custom Reranking): 抽出された候補に対して多角的な情報に基づくリランキングを実施します。
      • 📐 ベクトル類似度 (重み: 0.60)
      • 🕸️ CWE 階層グラフ距離 (重み: 0.20): MITRE CWE の親子関係グラフに基づく最短経路距離 (BFS) スコアリング
      • 🏷️ CPE キーワードマッチ (重み: 0.15): ベンダー・製品情報の一致判定
      • 📊 CVSS ベクトル一致度 (重み: 0.05): 攻撃ベクトル (AV), 複雑さ (AC), 必要な特権 (PR), ユーザー関与 (UI) の適合率
  • 🤖 Gemini LLM による自動悪用可能性評価 (LLM Evaluation)

    • Google Gemini API (gemini-3.1-flash-lite / gemini-2.5-flash) を用い、実証コードまたは NVD 記述から以下の 3 要素を日本語で構造化抽出します。
      1. アタックサーフェス (Attack Surface): 攻撃対象となるエントリポイント、プロトコル、ポート、パラメータなど
      2. ペイロードの構造 (Payload Structure): 悪意あるペイロードのフォーマットやデータ構造
      3. 実行前提条件 (Prerequisites): 攻撃成立に必要な認証・権限・環境条件
  • 📁 ExploitDB Git Submodule 統合 & オフライン対応

    • ExploitDB リポジトリを Git Submodule として直接管理。ローカルの files_exploits.csv を高速解析し、ネットワークに依存しない安定した実証コード検索およびローカル /API.php モックサーバー運用を実現します。
  • 高速キャッシング & ダッシュボード UI

    • SQLite WAL (Write-Ahead Logging) モードと 24 時間 TTL キャッシュテーブル構造により、重複リクエストの高速化を実現。
    • Mock / Live モード切り替えに対応した直感的な Web ダッシュボード画面を提供。

🛠️ 技術スタック & 前提条件 (Technology Stack & Prerequisites)

必須環境 (Prerequisites)

  • Python: 3.13 以上
  • パッケージマネージャー: uv (高速な Python パッケージ・プロジェクト管理ツール)
  • バージョン管理: Git (ExploitDB サブモジュール同期用)

主な依存ライブラリ (Dependencies)

  • ベクトル検索: annoy (>=1.17.3)
  • AI / LLM API: google-genai (>=2.12.1), openai (>=2.46.0)
  • データ処理・計算: numpy, pandas, scikit-learn
  • ネットワーク & 設定: requests, python-dotenv

📂 ディレクトリ構成 (Directory Structure)

chiteki/
├── data/                         # データストア・インデックス群
│   ├── cache/                    # SQLite データベース (nvd.db, WAL モード)
│   ├── cwe/                      # CWE 階層構造定義 (cwec_latest.xml, cwe_graph.json)
│   ├── exploitdb/                # Git Submodule (Exploit-DB 公式リポジトリ)
│   ├── feeds/                    # NVD オフラインフィードデータ (.json.gz)
│   └── index/                    # Annoy ベクトル検索用インデックス (cve_index.ann)
├── frontend/                     # ダッシュボード Web UI
│   ├── app.js                    # UI 制御・API 通信ロジック
│   ├── index.html                # メインダッシュボード HTML
│   └── style.css                 # スタイリング定義
├── src/                          # バックエンドソースコード
│   ├── api/                      # 外部API連携 & 内蔵サーバーモジュール
│   │   ├── exploitdb_client.py   # ExploitDB API クライアント
│   │   ├── exploitdb_server.py   # 内蔵 ExploitDB モックサーバー (/API.php)
│   │   ├── llm_client.py         # Gemini API による脆弱性構造解析
│   │   └── nvd_client.py         # NVD REST API v2.0 クライアント
│   ├── batch/                    # 各種データ構築・更新バッチスクリプト
│   │   ├── build_cwe.py          # CWE XML のダウンロード & 階層グラフ生成
│   │   ├── fetch_nvd.py          # NVD API から CVE 情報の取得・SQLite 保存
│   │   ├── generate_embedding_docs.py   # OpenAI Batch 用データの作成
│   │   ├── generate_embeddings_direct.py # 直接 API 経由での Embeddings 生成
│   │   ├── generate_idf.py       # TF-IDF 計算用 IDF辞書生成
│   │   ├── import_embeddings.py  # Batch API 出力データのインポート
│   │   └── import_nvd_feeds.py   # オフライン NVD フィードデータのインポート
│   ├── core/                     # 検索・評価・セキュリティ コアエンジン
│   │   ├── reranker.py           # カスタムリランキングスコアリングエンジン
│   │   ├── security.py           # 正規化 & パストラバーサル防止セキュリティ機能
│   │   ├── text.py               # テキスト正規化 & トークナイズ処理
│   │   └── vector_search.py      # Annoy ベクトル検索 & インデックス構築
│   ├── util/                     # ユーティリティ
│   │   └── cve_utils.py          # CVE テキスト生成・正規化ユーティリティ
│   ├── exploitdb_mgr.py          # ExploitDB 管理 & CSV パース処理
│   ├── main.py                   # DB 初期化 & 個別 CVE 取得エントリポイント
│   └── server.py                 # メイン Web サーバー (HTTP & API Handler)
├── .env.example                  # 環境変数テンプレート
├── .gitmodules                   # ExploitDB サブモジュール設定
├── pyproject.toml                # uv プロジェクト定義ファイル
└── README.md                     # プロジェクトドキュメント

🚀 インストール & セットアップ (Installation & Setup)

1. リポジトリのクローン & サブモジュールの初期化

Git リポジトリをクローンし、ExploitDB の Git サブモジュールを初期化します。

git clone https://github.com/your-org/chiteki.git
cd chiteki

# ExploitDB サブモジュールの初期化・同期
git submodule update --init --recursive

2. Python 環境構築 (uv の使用)

uv を使用してプロジェクト依存関係を同期・インストールします。

uv sync

3. 環境変数設定 (.env)

プロジェクトルートに .env ファイルを作成し、必要な API キーを設定します。(.env.example を参考にしてください)

cp .env.example .env

⚙️ 環境変数ガイド (Environment Variables Guide)

.env に設定可能な項目一覧:

環境変数名 必須 説明 デフォルト値
GEMINI_API_KEY 推奨 Gemini API キー (LLM 脆弱性解析で使用。LLM_API_KEY もエイリアスとして利用可) -
GEMINI_MODEL 任意 使用する Gemini モデル名 gemini-3.1-flash-lite
OPENAI_API_KEY 推奨 OpenAI API キー (Embeddings text-embedding-3-small 生成で使用) -
NVD_API_KEY 任意 NVD API キー (設定すると API レート制限が 6秒→1秒 に緩和) -
EXPLOITDB_API_URL 任意 ExploitDB 外部 / モック API のベース URL http://127.0.0.1:8080

🏃 実行手順 & バッチ処理 (How to Run)

1. データベース & インデックス構築バッチの実行

システムの初回利用時や最新データへの更新時に、以下のバッチ処理を順に実行します。

① CWE 階層グラフの生成

MITRE から最新の CWE XML をダウンロードし、グラフ構造データ (cwe_graph.json) を構築します。

uv run python src/batch/build_cwe.py

② NVD CVE データの取得・蓄積

NVD API から CVE 情報を取得して SQLite (data/cache/nvd.db) に蓄積します。

uv run python src/batch/fetch_nvd.py

(※ローカルに data/feeds/*.json.gz がある場合は uv run python src/batch/import_nvd_feeds.py によるオフラインインポートも可能です)

③ ベクトル埋め込み (Embeddings) の生成

SQLite 内の CVE 記述から OpenAI API を用いて埋め込みベクトルを生成・保存します。

uv run python src/batch/generate_embeddings_direct.py

2. Web サーバーの起動

メインサーバーを起動します。起動時に ExploitDB モック API サーバー (http://127.0.0.1:8080) および Vector Search Annoy インデックスの検証が自動で行われます。

uv run python src/server.py

💡 ポート番号を変更したい場合は引数として指定できます: uv run python src/server.py 8080 (または uv run src/server.py 8080)


3. ダッシュボード UI の利用

サーバー起動後、ブラウザで以下の URL にアクセスします。

http://localhost:8000/
  • CVE ID 入力: 対象の CVE (例: CVE-2017-0144) を入力
  • 製品 / ベンダー (任意): 対象コンポーネント (例: windows) を入力
  • 「評価実行」: LLM 解析結果、ExploitDB PoC 情報、およびカスタムリランキングに基づく類似 CVE リストが表示されます。

📡 API エンドポイント仕様 (API Endpoints)

1. 脆弱性総合評価 API (/api/evaluate)

対象の CVE に対する統合解析結果(NVD メタデータ、PoC 実証コード、Gemini LLM 悪用可能性評価、類似 CVE 推奨)を返却します。

  • Method: GET
  • URL: /api/evaluate

クエリパラメータ

パラメータ 必須 説明
cve string はい 対象の CVE ID (例: CVE-2017-0144)
product string いいえ 対象の製品・ベンダー名 (例: windows)
force boolean いいえ true の場合、キャッシュを無視して強制的に再評価を実行

レスポンス例 (200 OK)

{
  "cve_details": {
    "cve_id": "CVE-2017-0144",
    "description": "The SMBv1 server in Microsoft Windows Server 2008 R2 and Windows 7 SP1...",
    "published": "2017-03-17T00:00:00.000",
    "last_modified": "2024-07-16T00:00:00.000"
  },
  "best_exploit": {
    "id": "41891",
    "file": "exploits/windows/remote/41891.rb",
    "description": "Microsoft Windows - 'EternalBlue' SMB Remote Code Execution (MS17-010)",
    "platform": "windows",
    "type": "remote",
    "port": "445"
  },
  "exploits": [ /* 候補 Exploit 一覧 */ ],
  "exploit_code": "# MS17-010 EternalBlue Ruby Exploit Code...",
  "evaluation": {
    "attack_surface": "SMBv1 サービスが稼働する TCP 445 番ポート",
    "payload_structure": "特製された SMBv1 リクエストパケットによるバッファオーバーフロー",
    "prerequisites": "SMBv1 サービスへのネットワーク到達性および認証なし接続の許可"
  },
  "recommendations": [
    {
      "cve_id": "CVE-2017-0145",
      "similarity_score": 0.8542,
      "description": "The SMBv1 server in Microsoft Windows..."
    }
  ]
}

2. ExploitDB モック API (/API.php)

内蔵の ExploitDB モックサーバー(デフォルト: http://127.0.0.1:8080/API.php)が提供する軽量検索 API です。

  • Method: GET
  • URL: /API.php

クエリパラメータ

パラメータ 説明
cve string CVE ID でのエグザクト検索 (例: CVE-2017-0144)
exploit string キーワードによる Exploit 検索

レスポンス例 (200 OK)

{
  "ID": "41891",
  "file": "exploits/windows/remote/41891.rb",
  "title": "Microsoft Windows - 'EternalBlue' SMB Remote Code Execution (MS17-010)",
  "platform": "windows",
  "type": "remote",
  "port": "445"
}

🔒 セキュリティ & 開発方針 (Security & Safety)

  • パストラバーサル対策: ExploitDBManager.read_exploit_code() および Web サーバーの静的ファイルハンドラにてパス検証を実施し、絶対パス指定や .. によるディレクトリトラバーサル攻撃を防いでいます。
  • SQL インジェクション対策: すべての SQLite クエリでパラメータ化クエリ (?) を徹底し、信頼できない入力値の埋め込みを防止しています。
  • レート制限遵守: NVD API 規約(API キー保持時は 1 秒間隔、未保持時は 6 秒間隔)に従う自動バックオフおよび再試行ロジックを搭載しています。

📜 ライセンス (License)

本プロジェクトは MIT ライセンス等の配下で提供されます。ExploitDB データにつきましては各ソース (Offensive Security / ExploitDB) のライセンス規約をご確認ください。

About

support seeing CVEs

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages